package main

import "fmt"

type Person struct {
	Name string
	age  int
}

// 构造函数 约定成俗 使用 New 开头
// 返回结构体 因结构体为值类型 赋值的时候都是 拷贝 内存开销大
// 返回结构体指针 当结构体比较大时 使用结构体指针 减少内存开销

func NewPerson(name string, age int) *Person {
	return &Person{
		name,
		age,
	}
}

func main() {
	p1 := NewPerson("张三", 20)
	p2 := NewPerson("李四", 18)
	fmt.Printf("%T %#v\n", p1, p1)
	fmt.Printf("%T %#v\n", p2, p2)
}
